\def\lecture{1}
\clearpage \noindent\begin{tabularx}{\linewidth}{|X|}
\hline \vskip -2mm
{\sf 编译原理} \hfill August 31, 2011 \\
{\centering \sf \large Lecture \lecture:
引论\footnote{参考了计算机92班崔晨晨的笔记, 根据课件修正} \\ }
\textsl{Lecturer: 冯博琴 \hfill Scriber: 戴唯思}\\ \hline
\end{tabularx}
\setcounter{section}{0}
\renewcommand{\thepage}{\lecture -\arabic{page}}

\section{关于这门课程}
    
    \subsection{课程性质}

        原理性课程: 基础性, 科学性, 普适性; 针对性差

    \subsection{学习的目的}

        \begin{itemize}
            \item 实现(通用)编译器
            \item 实现专用编译器
            \item 学习编译思想 \\
                计算思维: 抽象, 自动化
        \end{itemize}

    \subsection{如何学}

        \begin{itemize}
            \item 把握三年级的特点
            \item 纪律: 准时到, 认真听, 注意记
            \item 注意学习方法
        \end{itemize}

\section{什么叫编译程序}

    \subsection{编译程序历史}

        \begin{itemize}
            \item 编译程序是系统软件中资格最老的成员之一
            \item 发展十分迅速和成熟
            \item 已经形成一套系统化的理论和技术
        \end{itemize}

    \subsection{编译理论与其他课程关系}

        以自动机和形式语言为基础, 用到数据结构和离散数学知识, 以操作系统为控制对象.

    \subsection{编译理论的应用}

        编译理论的许多想法和技术可以用于一般软件的设计. 如有穷状态技术用于文本编辑程序、情报检索和模式识别, 上下文无关文法和语法制导翻译用于建立多种文本处理程序, 代码优化技术用于程序校验和由非结构化到结构化的程序转换.

    \subsection{编译程序和翻译程序}

        \textbf{翻译程序}: 一种程序, 它的输入是某种语言的一系列语句, 输出是另一种语言的一系列语句.

    \subsection{编译程序}

        高级语言源程序通过编译程序生成面向机器的代码, 可能需要用到汇编程序和装配程序.

\section{编译过程概述}

    \subsection{编译过程的组成}

        源程序通过\textbf{词法分析}分解为单词和符号, 通过\textbf{语法分析}被识别为语法单位, 通过\textbf{中间代码生成}产生中间代码, 通过\textbf{代码优化}和\textbf{目标代码生成}产生目标代码.

    \subsection{词法分析(lexical analysis)}

        任务: 扫描和分解字符串, 识别\{定义符, 标识符, 分界符, 运算符, 常数\}

        依据: 构词规则

        主要理论基础: 自动机理论

    \subsection{语法分析(syntax analysis)}

        任务: 在词法分析基础上将单词符号串转化为语法单位, 并确定整个输入串是否构成语法上正确的程序.

        依据: 语法规则

        主要理论基础: 上下文无关文法

    \subsection{中间代码生成(IR\protect\footnote{intermediate representation} generation)}

        任务: 在语法范畴进行初步翻译, 翻译成等价的中间语言.

        \textbf{中间语言}被认为是一种形式化的语言, 其中的一种叫做四元式.

        依据: 语义规则

        主要理论基础: 属性文法

    \subsection{中间代码优化(IR optimization)}

        任务: 对代码(主要是中间代码)进行加工变换, 在\textsl{执行结果相同}的情况下产生\textsl{时间和空间上}更高效的中间代码.

        依据: 程序等价变换规则

        主要理论基础: 数据流方程

    \subsection{目标代码生成(code generation)}

        任务: 将中间代码变换为\textsl{特定机器}上的低级机器语言代码

        \begin{itemize}
            \item 内存单元分配
            \item 寄存器分配
            \item 指令集选择
        \end{itemize}

        目标代码形式: 绝对指令, 可重定位指令, 汇编指令

        依据: 硬件体系结构, 指令系统
